package org.upo.eps.it.phama.bean;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;

@Entity
@Table(name="far_almacen", catalog="phama")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "almacen", propOrder = {})    
public class Almacen  implements Serializable {
    
     @Id 
     @GeneratedValue(strategy=IDENTITY)
     @Column(name="ID_ALMACEN", unique=true, nullable=false)
     private Integer idAlmacen;
     
     @ManyToOne(fetch=FetchType.EAGER)
     @JoinColumn(name="ID_DIRECCION", nullable=false)
     private Direccion direccion;
     
     @Column(name="NOMBRE", nullable=false)
     private String nombre;
     
     @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="almacen")
     @XmlTransient
     private Set<Producto> misProductos = new HashSet<>(0);

     //<editor-fold defaultstate="collapsed" desc="constructors">
     public Almacen() {
     }
     
     public Almacen(Direccion direccion, String nombre) {
         this.direccion = direccion;
         this.nombre = nombre;
     }
     
     public Almacen(Direccion direccion, String nombre, Set<Producto> misProductos) {
         this.direccion = direccion;
         this.nombre = nombre;
         this.misProductos = misProductos;
     }
     //</editor-fold>
   
     //<editor-fold defaultstate="collapsed" desc="getters & setters">
     public Integer getIdAlmacen() {
         return this.idAlmacen;
     }
     
     public void setIdAlmacen(Integer idAlmacen) {
         this.idAlmacen = idAlmacen;
     }
     
     public Direccion getDireccion() {
         return this.direccion;
     }
     
     public void setDireccion(Direccion direccion) {
         this.direccion = direccion;
     }

     public String getNombre() {
         return this.nombre;
     }
     
     public void setNombre(String nombre) {
         this.nombre = nombre;
     }
     
     public Set<Producto> getMisProductos() {
         return this.misProductos;
     }
     
     public void setMisProductos(Set<Producto> misProductos) {
         this.misProductos = misProductos;
     }
     //</editor-fold>

     @Override
     public String toString(){
         return this.nombre;
     }
     
     public String getFullname(){
         return this.toString();
     }
}


